package basicDataType;

/**
 * @projectName: java-sample
 * @description:
 * @author: Adam
 * @create: 2019-11-11 10:36
 **/

public class BasicTypeDemo {
    /**
    变量就是申请内存来存储值。也就是说，当创建变量的时候，需要在内存中申请空间。
    内存管理系统根据变量的类型为变量分配存储空间，分配的空间只能用来储存该类型数据。
    因此，通过定义不同类型的变量，可以在内存中储存整数、小数或者字符。
    Java 的两大数据类型:
    1.内置数据类型
    2.引用数据类型
    */

    /*****************************java八种基本数据类型**************************************/

    /*Java语言提供了八种基本类型。六种数字类型（四个整数型，两个浮点型），一种字符类型，还有一种布尔型。
    四个整数型：byte(8位，一个字节)，short(16位，两个字节)，int(32位，四个字节)，long(64位,八个字节)
    两个浮点型:float(32位,单精度),double(64位,双精度)

    byte：
    byte 数据类型是8位、有符号的，以二进制补码表示的整数；
    最小值是 -128（-2^7）；
    最大值是 127（2^7-1）；
    默认值是 0；
    byte 类型用在大型数组中节约空间，主要代替整数，因为 byte 变量占用的空间只有 int 类型的四分之一；
    例子：byte a = 100，byte b = -50。

    short：
    short 数据类型是 16 位、有符号的以二进制补码表示的整数
    最小值是 -32768（-2^15）；
    最大值是 32767（2^15 - 1）；
    Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一；
    默认值是 0；
    例子：short s = 1000，short r = -20000。

    int：
    int 数据类型是32位、有符号的以二进制补码表示的整数；
    最小值是 -2,147,483,648（-2^31）；
    最大值是 2,147,483,647（2^31 - 1）；
    一般地整型变量默认为 int 类型；
    默认值是 0 ；
    例子：int a = 100000, int b = -200000。

    long：
    long 数据类型是 64 位、有符号的以二进制补码表示的整数；
    最小值是 -9,223,372,036,854,775,808（-2^63）；
    最大值是 9,223,372,036,854,775,807（2^63 -1）；
    这种类型主要使用在需要比较大整数的系统上；
    默认值是 0L；
    例子： long a = 100000L，Long b = -200000L。
            "L"理论上不分大小写，但是若写成"l"容易与数字"1"混淆，不容易分辩。所以最好大写。

    float：
    float 数据类型是单精度、32位、符合IEEE 754标准的浮点数；
    float 在储存大型浮点数组的时候可节省内存空间；
    默认值是 0.0f；
    浮点数不能用来表示精确的值，如货币；
    例子：float f1 = 234.5f。

    double：
    double 数据类型是双精度、64 位、符合IEEE 754标准的浮点数；
    浮点数的默认类型为double类型；
    double类型同样不能表示精确的值，如货币；
    默认值是 0.0d；
    例子：double d1 = 123.4。

    boolean：
    boolean数据类型表示一位的信息；
    只有两个取值：true 和 false；
    这种类型只作为一种标志来记录 true/false 情况；
    默认值是 false；
    例子：boolean one = true。

    char：
    char类型是一个单一的 16 位 Unicode 字符；
    最小值是 \u0000（即为0）；
    最大值是 \uffff（即为65,535）；
    char 数据类型可以储存任何字符；
    例子：char letter = 'A';。
    */

    /*注：float和double的区别
    float是单精度类型,精度是8位有效数字，取值范围是10的-38次方到10的38次方，float占用4个字节的存储空间
    double是双精度类型，精度是17位有效数字，取值范围是10的-308次方到10的308次方，double占用8个字节的存储空间
    当你不声明的时候，默认小数都用double来表示，所以如果要用float的话，则应该在其后加上f
    例如：float a=1.3;
    则会提示不能将double转化成float  这成为窄型转化
    如果要用float来修饰的话，则应该使用float a=1.3f
    注意float是8位有效数字，第7位数字将会产生四舍五入
    所以如果一个float变量 这样定义:  float a=1.32344435;   则第7位将产生四舍五入(5及5以下的都将舍去)*/

    public static void main(String[] args){
            new BasicTypeDemo().floatDemo();
    }

    /*浮点数最好用来表示象测量值这类数值，这类值从一开始就不怎么精确。*/
    public void floatDemo(){
        float a = 2.1f;
        double b = 3.3;
        b = a;
        //2.0999999046325684
        System.out.println("单精度浮点数a的值为:"+b);
        //true
        System.out.println(0.4>0.4f);
    }
}
